package crawlingtosea.algorithms.bitmap
{
	import flash.display.BitmapData;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	
	import crawlingtosea.utils.ArrayUtil;
	
	/**
	 * 切割位图算法。
	 * @author mengtianwxs
	 * @createTime 2013-3-20
	 */	
	
	public class Slice
	{
		private var _bmpd:BitmapData;
		private var _arr:Array;
		
		public function Slice(bitmapData:BitmapData=null)
		{
			_arr=[];
			this._bmpd=bitmapData;
		}
		
		////////////////////////////////////////////
		//setter/getter方法
		////////////////////////////////////////////
		
		public function get bitmapData():BitmapData
		{
			return _bmpd;
		}

		public function set bitmapData(value:BitmapData):void
		{
			_bmpd = value;
		}
		
		/**
		 * 把得到的位图bitmapData对象存储到bitmapDataArray数组中。 
		 * @return 
		 * 
		 */		
		public function get bitmapDataArray():Array
		{
			if(ArrayUtil.hasArray(_arr))
				
				return _arr;
			return null;
		}

		/**
		 * 开始切割位图 
		 * @param segment
		 * 
		 * 下面的示例演示了如何使用此方法
		 * @example
		 * <listing version="3">
		 * import crawlingtosea.debug.Config;
		 import crawlingtosea.container.Container;
		 import crawlingtosea.loaders.LoaderBitmap;
		 import crawlingtosea.events.LoaderEvent;
		 import crawlingtosea.algorithms.bitmap.Slice;
		 import flash.events.Event;
		 import flash.display.Bitmap;
		 
		 Config.RegisterAndInitStage(this,stage);
		 Config.HideDefaultMenu();
		 Config.ParseAndTraceStage();
		 var arr:Array;
		 var i:int=0;
		 
		 var c:Container = new Container(this);
		 var bm:Bitmap=new Bitmap();
		 
		 var l:LoaderBitmap = new LoaderBitmap("a.jpg",true);
		 l.addEventListener(LoaderEvent.COMPLETED,onComplete);
		 l.startLoad();
		 function onComplete(e:LoaderEvent):void
		 {
		 c.push([l.getBitmap(),bm]);
		 var s:Slice=new Slice(l.bitmapData);
		 s.startSlice(4);
		 arr=s.bitmapDataArray;
		 
		 stage.addEventListener(Event.ENTER_FRAME,onE);
		 }
		 function onE(e:Event):void
		 {
		 i++;
		 if(i>arr.length)
		 {
		 i=0;
		 }
		 bm.bitmapData=arr[i];
		 }
		 
		 * </listing>
		 * @see LoaderBitmap#getBitmap()
		 */		
		public function startSlice(segment:int=4):void
		{
			var w:Number=_bmpd.width/segment;
			var h:Number=_bmpd.height/segment;
			
			for (var i:uint=0; i<segment; i++)
			{
				for (var j:uint=0; j<segment; j++)
				{
					var bmd:BitmapData = new BitmapData(w,h);
					bmd.copyPixels(_bmpd,new Rectangle(j*w,i*h,w,h),new Point());
					_arr.push(bmd);
				}
			}
		}
		
		
	}
}